package com.zzxy.po;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

/**
 * SpringMVC初始化配置类（替代spring-mvc.xml）
 */
@Configuration // 标识为配置类
@EnableWebMvc  // 启用SpringMVC功能
@ComponentScan(basePackages = "com.example.controller") // 扫描控制器所在的包
public class MvcInit implements WebMvcConfigurer {

    /**
     * 配置视图解析器（解析JSP等视图）
     */
    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        // 设置视图类型为JSTL（支持EL表达式）
        viewResolver.setViewClass(JstlView.class);
        // 设置视图前缀（JSP文件存放路径）
        viewResolver.setPrefix("/WEB-INF/views/");
        // 设置视图后缀（JSP文件扩展名）
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    /**
     * 配置静态资源映射（如CSS、JS、图片等）
     * 避免静态资源被DispatcherServlet拦截
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 映射静态资源路径：访问 /static/** 指向 /WEB-INF/static/ 目录
        registry.addResourceHandler("/static/**")
                .addResourceLocations("/WEB-INF/static/");
    }

    // 如需配置拦截器、消息转换器等，可重写WebMvcConfigurer的其他方法
    // 例如：配置拦截器
    /*
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册自定义拦截器，拦截所有请求（排除静态资源）
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/static/**");
    }
    */

    // 例如：配置消息转换器（解决JSON乱码等问题）
    /*
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setDefaultCharset(StandardCharsets.UTF_8);
        converters.add(converter);
    }
    */
}
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * Web应用初始化类（替代web.xml）
 * 用于注册DispatcherServlet和加载Spring配置
 */
public class WebAppInit extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 指定Spring核心配置类（如Service、Dao层配置，MyBatis配置等）
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class}; // 假设Spring核心配置类为SpringConfig
    }

    /**
     * 指定SpringMVC配置类（即上面的MvcInit）
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{MvcInit.class};
    }

    /**
     * 指定DispatcherServlet的映射路径（通常为 / ，表示拦截所有请求）
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
